在研究類神經網路的程式時,發現會用到一些這概念,因此就來研究了一下。
這四樣東西,在機器學習時會很常用到,有時候需要調整這些參數來使機器學習過程更加順利且精準。
Epoch這是指當所有資料都被用來訓練類神經網路一次,就算1個Epoch。舉例來說,今天有100筆資料,將它們全部丟進類神經網路中訓練,就算是1個Epoch。
Batch size是把資料分成一堆堆,分別丟入類神經網路中訓練,而非全部一起丟進去訓練。舉例來說,今天有100筆資料,我設定Batch size=10,也就是一次只輸入10筆資料進類神經網路中,這動作進行10次之後,才會是1個Epoch。
那麼究竟Batch size要設定比較大才好,還是小呢?我們來看看圖(一)。
藍色線條是將全部資料丟進去一起訓練,最終訓練的效果是最好的,可以收斂到一個點上,但是過程較慢,尤其越到後面進步速度越慢,因此要Epoch很多次才可以。
綠色線條是將資料分批成很多份,每份數量都差不多(根據自己有的資料數來決定要分多少批),雖然在訓練時很快就能到達一定的程度,但是卻會因為每次訓練資料數過少的關係,可能換其他組時,參數的變動就會很大,收斂不怎麼好。
紅色線條是每次都用隨機資料數量,可能一下子會把所有資料丟進訓練,也可能一次只丟入一筆。這樣的情況反而更糟,很難收斂成功,但還是會比藍色線條更快到最佳解的地方。
剛開始接觸程式時,學習到Recurtion(迴圈),也會學到Iteration(迭代),前者是不斷呼叫自身程式碼得到結果,後者是用迴圈去重複執行程式碼得到結果。
在機器學習上Iteration跟Batch size有關,因為如果有設定Batch size大小,就會有分批處理資料的情況,這時候就要用迴圈不斷把資料輸入進類神經網路中進行訓練。舉例來說,有100筆資料,一次只訓練其中10筆資料,就要10次迴圈才算是1個Epoch,也就是在這例子的情況下,1個Epoch就要10次Iteration。
因此概念上就是:原始資料大小=Iteration×Batch size=1 Epoch。
如果有個工程師,在100筆資料的情況下,決定每次用20筆資料進行訓練,全部資料都要訓練3次,這樣會Iteration幾次呢?Iteration=(原始資料大小÷Batch size)×Epoch=(100÷20)×3=15次。
Learning rate
Learning rate跟更新類神經網路的公式有關係,如圖(二)。
η就是Learning rate,在更新權重的時候,會由η乘上∇E(Gradient),來調整權重。但要注意,在梯度下降法篇中有提到,如果切線的斜率調整太大的話,就會沒辦法收斂,Learning rate就類似於調整切線斜率,要讓機器學習進展更快,還是慢一點之類的。雖然欲速則不達,但是太慢的話又很浪費時間。
以上參數都沒有一定的設定,也有可能這設定在某些領域不好,但在另外的領域會有不錯的成效。而且有可能每個人設備不同,比如資料一次丟入,只要進行多次訓練,還是能達到不錯的成效,但如果設備不好的情況下,可能連第一次訓練都無法成功完成。因此這些設定還是得親自測試,一步步調整到適合自己想要的機器學習的參數,這樣才比較適當。